#include "consultaproveedores.h"
#include "ui_consultaproveedores.h"
#include "reg_mod_proveedor.h"
#define ACTIVO "activo"
#define INACTIVO "inactivo"
#define NOMBRE "Nombre"
#define RUC "RUC"

ConsultaProveedores::ConsultaProveedores(QWidget *parent) :
    VentanaConsulta(parent)
{
    indiceBusqueda = 0;

    this->setWindowTitle("Consultar Proveedores");
    modeloConsulta->setTable("proveedor");
    modeloConsulta->setHeaderData(0,Qt::Horizontal,"Id");
    modeloConsulta->setHeaderData(1,Qt::Horizontal,NOMBRE);
    modeloConsulta->setHeaderData(2,Qt::Horizontal,"Contacto");
    modeloConsulta->setHeaderData(3,Qt::Horizontal,RUC);
    modeloConsulta->setHeaderData(4,Qt::Horizontal,"direccion");
    modeloConsulta->setHeaderData(5,Qt::Horizontal,"telefono");
    modeloConsulta->setHeaderData(6,Qt::Horizontal,"correo");
    modeloConsulta->setHeaderData(7,Qt::Horizontal,"estado");

    modeloConsulta->select();

    //Se establece el source model para el filtro
    filtro->setSourceModel(modeloConsulta);

        ui->tableView->setModel(filtro);

    QStringList elementos;
    elementos << NOMBRE << RUC;
    ui->comboBuscarPor->addItems(elementos);
    ui->tableView->setModel(filtro);
    ui->tableView->hideColumn(0);
    ui->tableView->hideColumn(7);

    ui->textoBusqueda->setPlaceholderText("Nombre");


    filtro->beginDeclareFilter();
    filtro->setFilter(7, QVariant(ACTIVO), Qt::DisplayRole, Qt::MatchExactly);
    filtro->endDeclareFilter();

}

void ConsultaProveedores::on_registrar_clicked()
{
    Reg_mod_proveedor *registroProveedor = new Reg_mod_proveedor();
    registroProveedor->exec();
    modeloConsulta->select();
    delete registroProveedor;
}
void ConsultaProveedores::on_modificar_clicked()
{
    QModelIndexList indexes = obtenerIndicesSeleccionados(0);
    if(indexes.count() == 1){
        QModelIndex index = indexes.at(0).sibling(indexes.at(0).row(), 0);
        int id = ui->tableView->model()->data(index).toInt();


       //Obtenemos al proveedor seleccionado.
       QDjangoQuerySet<Proveedor> proveedores;
       Proveedor *proveedor = proveedores.filter(QDjangoWhere("id_proveedor", QDjangoWhere::Equals, id)).at(0);

       //Abrimos la ventana de edición con el registro del proveedor cargado.
       Reg_mod_proveedor *modifProveedor = new Reg_mod_proveedor(this, proveedor);
       modifProveedor->exec();
       modeloConsulta->select();
       delete modifProveedor;
       delete proveedor;
    }
    else
    {
       cuadroMensaje("Ningún proveedor seleccionado", "Debe seleccionar un registro para poder editarlo");
    }
}

void ConsultaProveedores::on_eliminar_clicked()
{
    QModelIndexList indexes = obtenerIndicesSeleccionados(0);
    if(indexes.count() > 0) {
        QModelIndex index = indexes.at(0).sibling(indexes.at(0).row(), 0);

        int id = ui->tableView->model()->data(index).toInt();

         QDjangoQuerySet<Proveedor> proveedores;
         Proveedor *prov = proveedores.filter(QDjangoWhere("id_proveedor", QDjangoWhere::Equals, id)).at(0);

        int resp = cuadroMensaje("Confirmación","<p align=center><b>¿Desea dar de baja al proveedor seleccionado?</b></p>", "pregunta");

        if (resp == QMessageBox::Ok)
        {
            prov->setEstado(INACTIVO);
            prov->save();
            delete prov;
            modeloConsulta->select();
        }
    }
    else
    {
        cuadroMensaje("Ningún proveedor seleccioando", "Debe seleccionar un proveedor a dar de baja");
    }
}

void ConsultaProveedores::on_textoBusqueda_textChanged(const QString &arg1)
{
     filtro->beginDeclareFilter();
     filtro->setFilter(indiceBusqueda, QVariant(arg1), Qt::DisplayRole, Qt::MatchStartsWith);
     filtro->endDeclareFilter();
}

void ConsultaProveedores::on_comboBuscarPor_currentTextChanged(const QString &arg1)
{
    ui->textoBusqueda->setPlaceholderText(arg1);

    if(arg1 == NOMBRE) indiceBusqueda = 1;
    if(arg1 == RUC) indiceBusqueda = 3;
}

void ConsultaProveedores::on_refrescarTabla_clicked()
{
    //Al refrescar la tabla se eliminan todos los filtros de todas las columnas
    for(int i=0;i<ui->tableView->model()->columnCount()-1;i++){
        filtro->removeFilter(i);
    }
    ui->comboBuscarPor->setCurrentIndex(0);
}

void ConsultaProveedores::on_checkActivos_toggled(bool checked)
{
    if(checked){
        filtro->beginDeclareFilter();
        filtro->setFilter(7, QVariant(ACTIVO), Qt::DisplayRole, Qt::MatchExactly);
        filtro->endDeclareFilter();
    }
    else filtro->removeFilter(7);
}

void ConsultaProveedores::on_tableView_doubleClicked()
{
    ConsultaProveedores::on_modificar_clicked();
}
#undef ACTIVO
#undef INACTIVO
#undef NOMBRE
#undef RUC

